用光标移动函数gotoxy()实现方向键进行选择 | 您所在的位置:网站首页 › c语言 方向键 › 用光标移动函数gotoxy()实现方向键进行选择 |
coolblog(个人博客):http://blog.coolight.cool/ 0.效果图
可以用方向键进行选择,看起来高级点而且可以防止乱输入。
1.引入: 这是我以前经常写的选择:
相信这应该也是很多人在控制台的时候会用的吧, 的确这个简单容易写。
但!是! 人要有理想,控制台也是
所以我开始想把它写成一般游戏那种上下选择的样子: 所以就有了这篇博文
//------接下来让我们进入正题-----
2.思路
注意:内容代码中使用了我自定义的命名空间coolfun 如果必要请自行修改
我们首先把这部分cout出来
然后我们需要使用到控制台里的光标移动函数gotoxy()(头文件:)
图中最后的白块就是光标,光标在哪,cout输出的东西就会从那开始。(应该都是懂的吧...)
注意:gotoxy()并不是c++标准库里的,windows.h里其实也没有这玩意, 所以我们需要借助来自己“写一个”。 void light_gotoxy(int x, int y) { COORD pos = { (short)x,(short)y }; HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hOut, pos); }这里的X是横坐标,Y 是纵坐标。
借助gotoxy()移动到选项前的空白
怎么移动呢??
直接看图里,选项“自动模式”是在第3行,我们编程老传统默认0为开始,所以这应该认为是第2行。
gotoxy(0,2);//把光标移动到第2(实际第3)行第0(实际第1)个。
然后在这里cout >>”的上下就可以了。
怎么样,听起来是不是简简单单!
但!是!
仅仅依靠这一个移动光标的函数是不够的,
因为在让选择的这部分字打印之前经常是会有一些其他的提示,
抑或是之前已经有了一些输出了,例如:
我们是要把它搞成一个可以经常用的函数
不可能每次需要就自己数数在哪一行开始输出选项并移动
所以我们需要一个函数来获取在这之前光标的位置。
light_getxy() : 获取当前光标所在位置 void light_getxy(int& x, int& y) { HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(hConsole, &csbi); x = csbi.dwCursorPosition.X; y = csbi.dwCursorPosition.Y; }
把行数+1那就是下一行,然后开始cout我们我们的选项就可以了。
到这解决了输出位置的问题了
具体的让我们来看看实现代码吧。
这就是我们这篇博文的主体函数: template int switch_case(int case_num, const T* content_str) { int nowi = 1, nowx, nowy;//nowi 记录选择的选项编号 coolfun::light_getxy(nowx, nowy); cout 1) //在第一个再按上键会到最后一个 --nowi; else nowi = case_num; }break; case 80: //下 { if (nowi < case_num) //在最后一个按下键会到第一个 ++nowi; else nowi = 1; }break; case 13: //Enter键确定 { coolfun::light_gotoxy(nowx, nowy + nowi); cout 支持偏移< */ template int switch_case(int case_num, const T* content_str) { int nowi = 1, nowx, nowy;//nowi 记录选择的选项编号 coolfun::light_getxy(nowx, nowy); cout 1) //在第一个再按上键会到最后一个 --nowi; else nowi = case_num; }break; case 80: //下 { if (nowi < case_num) //在最后一个按下键会到第一个 ++nowi; else nowi = 1; }break; case 13: //Enter键确定 { coolfun::light_gotoxy(nowx, nowy + nowi); cout |
CopyRight 2018-2019 实验室设备网 版权所有 |